<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>全选反选2</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .wrap {
            width: 300px;
            margin: 100px auto 0;
        }

        table {
            border-collapse: collapse;
            border-spacing: 0;
            border: 1px solid #c0c0c0;
            width: 300px;
        }

        th,
        td {
            border: 1px solid #d0d0d0;
            color: #404060;
            padding: 10px;
        }

        th {
            background-color: #09c;
            font: bold 16px "微软雅黑";
            color: #fff;
        }

        td {
            font: 14px "微软雅黑";
        }

        tbody tr {
            background-color: #f0f0f0;
        }

        tbody tr:hover {
            cursor: pointer;
            background-color: #fafafa;
        }
    </style>
</head>
<body>
<div class="wrap">
    <table>
        <thead>
        <tr>
            <th>
                <input type="checkbox" id="j_cbAll"/>
            </th>
            <th>商品</th>
            <th>价钱</th>
        </tr>
        </thead>
        <tbody id="j_tb">
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>iPhone8</td>
            <td>8000</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>iPad Pro</td>
            <td>5000</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>iPad Air</td>
            <td>2000</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>Apple Watch</td>
            <td>2000</td>
        </tr>

        </tbody>
    </table>
    <input type="button" value="  反 选  " id="btn">
</div>
<script>
    //1 全选
    var j_cbAll=document.getElementById("j_cbAll");
    var j_tb=document.getElementById("j_tb");
    var inputs=j_tb.getElementsByTagName("input");
    j_cbAll.onclick= function () {
        for (var i=0;i<inputs.length;i++){
            var input=inputs[i];
            if(input.type==="checkbox"){
                input.checked=this.checked;
            }
        }
    }
    //上面处理程序是 当点击全选按钮是让 td里面的checkbox类型的input与当前this就是事件源这个input点击的对象保持一致
    //2 反选到父的checkbox 当点击子的checkbox时，如果所有的子checkbox被选中了，父的checkbox也被选中
    //如有子checkbox有一个没被选中 ，父的checkbox不被选中
    for (var i=0;i<inputs.length;i++){
        var input=inputs[i];
        //给所有子的checkbox注册绑定事件
        input.onclick=function(){
            var flag=true;
            for(var i=0;i<inputs.length;i++){
                if(input.checked){
                 flag=false;
                    break;
                }
            }
        }
    }
</script>
</body>
</html>